草庐IT

c++ - 从 C++ 类制作 Visual C++ DLL

全部标签

windows - 为什么加载 dll 不需要完整的文件路径?在什么情况下此功能会有用?

为什么Windows在调用LoadLibrary时不需要完整的文件路径,或者对于带有已注册DLL的CLSID等。在什么情况下有人会受益于不得不退回到DLL搜索顺序来查找dll?我的意思是,%SystemRoot%或%ProgramFiles%等变量可以将您带到适当的文件夹,而.\会让您留在当前目录中。那么为什么要含糊其词? 最佳答案 对于与GetProcAddress()的显式链接,我认为应该尽可能使用DLL的绝对路径。对于与.lib文件的隐式链接,必须在链接时确定DLL的名称,这排除了绝对路径。最安全的做法是将DLL放在与可执行文

c - Win VS2008 调用约定 : Delphi dll from c

我在C应用程序(VS2008,Win)中调用了一个用Borland中的Delphi编写的dll中的函数。该函数有效,但每次调用后我都会收到此错误:“ESP的值未在函数调用中正确保存[...]”,这意味着我的调用约定是错误的。我不知道Delphi,也没有完整的dll代码,但我相信这是Delphi函数:functiontranslate(file1,file2:PChar):PChar;stdcall;...Result:=PChar(c);end;exportstranslate;c中的相关部分:typedefchar*(__stdcall*translate)(char*,char*)

windows - 我们可以 rebase kernel32.dll 吗?这样两个进程的加载地址是不同的

具体来说,我想知道同一session中的两个进程的kernel32.dll加载地址是否可以不同?我想使用createremote线程,所以只想知道在任何情况下,远程进程中的kernel32加载地址是否可以不同于注入(inject)进程? 最佳答案 Kernel32.dll在所有进程上具有相同的基址,以允许您执行您想要执行的操作。阅读:WhyarecertainDLLsrequiredtobeatthesamebaseaddresssystem-wide? 关于windows-我们可以re

c++ - 延迟加载 DLL : "Exception 0xC06D007E: Module not found" when application started multiple times

我的应用程序在使用延迟加载DLL时出现间歇性崩溃。我们在几个不同的调用堆栈中看到了崩溃,但在__delayLoadHelper2中引发0xC06D007E:Modulenotfound时它总是崩溃。连续(串联)多次调用流程时引发异常。这是一个示例调用堆栈:KERNELBASE.dll!RaiseException()+0x3dbytesMYDLL.dll!__delayLoadHelper2(constImgDelayDescr*pidd=0x000000000012f650,__int64(void)**ppfnIATEntry=0x000000000012f570)Line331C

windows - 使用 Nuget 包 ServerAppFabric.Client 时系统找不到 Microsoft.ApplicationServer.Caching.Core.resources.dll

我在应用程序中包含了ServerAppFabric.Client.1.0.2912以执行一些基本的缓存诊断。但是,当我尝试使用缓存API时,我得到了这个异常:Caughtunhandledexception:System.TypeInitializationException:Thetypeinitializerfor'Microsoft.ApplicationServer.Caching.ConfigManager'threwanexception.--->System.IO.FileNotFoundException:Couldnotloadfileorassembly'Micro

c++ - 注入(inject) DLL 时,Explorer.exe 在启动时死锁

我使用注册表“运行”键在用户每次登录Windows时自动执行我的程序(使用HKCU\Software\Microsoft\Windows\CurrentVersion\Run注册表路径)。我的应用程序首先使用CommandLineDLL-Injector将DLL注入(inject)到explorer.exe进程中.效果应该是:每次用户登录后(重启Windows后)——我的应用程序被执行,我的DLL被注入(inject)到explorer.exe在某些情况下它可以工作,但在少数情况下(时间问题,很少重现),注入(inject)器和explorer.exe进程都死锁并且没有响应。我不确定,

windows - 我制作了一个 Windows bat 脚本,用于从列表中归档旧文件。对代码语法有什么建议吗?

不确定setlocal的用途,但我在一个脚本示例中找到了它,用于在for循环中需要多个命令的其他内容。Filelist.txt包含文件列表以及共享的完整文件路径。例如:\\FileShare\Division\Project\file.txtsetlocalenabledelayedexpansionfor/f"delims="%%iin(filelist.txt)do(mkdir"D:\Archive\%%~dpi"move"%%i""D:\Archive\%%i")endlocal该脚本获取filelist.txt中的文件(逐行)并复制路径的目录结构,然后将文件移动过来。使用上面的

windows - 构建并覆盖一个简单的 Winelib DLL

我有一个加载库的Windows可执行文件,我想创建一个将覆盖WindowsDLL的WinelibDLL。我已经搜索并尝试了2天,但它不起作用!请帮助我!基本上,我创建mydll.c和mydll.spec以使用以下命令构建WinelibDLL:winegcc-m32-shared-omydll.dllmydll.cmydll.spec现在我有了mydll.dll.so并且我想覆盖mydll.dll(两者都在同一个地方)我应该怎么办?我尝试重命名mydll.dll但在调用该函数时出现页面错误!我还尝试使用winecfg配置覆盖或设置WINEDLLPATH等环境变量。我不明白如何继续。我如何

windows - WinDbg:尝试附加到进程时 dbghelp.dll 的版本不匹配

一年多以前,我已经使用WinDbg和DebugDiag来查找我们在Java中使用的JNInativeDLL中的内存泄漏。现在我正在寻找线程句柄泄漏。我使用ProcessExplorer创建了一个内存转储,并尝试在DebugDiag中对其进行分析,但我得到的只是脚本错误:我也尝试过WinDbg,但它无法再附加到进程。我总是收到错误消息“dbghelp.dll的版本与调试器不匹配”:(“UnbekannterFehler”的意思是“未知错误”)我卸载了DebugDiag和WindowsSDK,然后下载了最新版本并安装了WindowsSDK8和DebugDiag1.2(x86)。问题保持不变

c++ - Qt 5.0.2 应用程序的可移植性问题。如何制作简约的Qt包?

我知道Qt默认情况下不是静态构建的,如果有任何扩展名为.lib或.a的文件,那么这些文件只是导入库。我希望我的应用程序小巧便携,所以除了考虑静态重新编译Qt之外,我还考虑如何使动态库包尽可能小,以便可以安装在另一台与Qt无关的计算机上,使其完全在运行我的Qt应用程序时有效。在这种情况下,我是关于WindowsXp或更高版本的Windows。在创建这样一个包的情况下,我首先意识到Qt5安装程序不会向系统和用户路径添加任何内容,并且在没有QtCreator的情况下我无法运行我编译的应用程序。但是,在我将此添加到系统和用户Path变量后:"K:\Qt\Qt5.0.2\5.0.2\mingw4